home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 5 / Gekikoh Dennoh Club Vol. 5 (Japan).7z / Gekikoh Dennoh Club Vol. 5 (Japan) (Track 01).bin / internet / webx / webxp040.lzh / Source / cut_disp.s < prev    next >
Text File  |  1998-06-17  |  3KB  |  161 lines

  1. *    cut_disp.s    .CUT âtâ@âCâïôWèJ
  2. *
  3. *        âüâéâèÅπé╔é╫é╜ô╟é▌é╡é╜ .CUT âtâ@âCâïé≡ôWèJé╡é▄é╖üB
  4. *        line_bytes é═ X68000 é╠ TEXTVRAM é╔ôWèJé╖éΘÅΩìçüA128 é≡ÄwÆΦé╡é─ë║é│éóüB
  5. *        ü@ü@üVü@ü@ é╔ 0 é≡ÄwÆΦé╖éΘé╞ô┴ùßé╞é╡é─ line_bytes é≡ .CUT é╠éwâTâCâYé⌐éτ
  6. *        ÄZÅoé╡é▄é╖üiühïlé▀é─ühôWèJé╖éΘüjüB
  7. *
  8. *    âRü[âï
  9. *        move.l    #line_bytes,-(sp)    * éPâëâCâôé╠âoâCâgÉöüi =0 é╛é╞ïlé▀é─ôWèJüj
  10. *        pea.l    TEXTVRAM        * ôWèJé╖éΘâAâhâîâX
  11. *        move.l    cut_ptr,-(sp)        * âxâ^ô╟é▌é╡é╜ .CUT âtâ@âCâïé╠âAâhâîâX
  12. *        jsr    _cut_disp
  13. *        lea.l    12(sp),sp
  14. *    ò╘éΦÆl
  15. *        é╚é╡
  16.  
  17.  
  18.     .xdef    _cut_disp
  19.  
  20.  
  21.     .text
  22.     .even
  23.  
  24. _cut_disp:        * .CUT âtâ@âCâïôWèJ
  25.  
  26.     movem.l    d1-d7/a0-a6,-(sp)
  27.  
  28.             * üilink û╜ù▀é≡Å╚ù¬é╡é─ê°é½Éöé≡Ä≤é»éΘïZ ü⌐ a6 éαÄgéñé╠é┼üj
  29.     movea.l    4+7*4+7*4(sp),a0    * a0.l = âxâ^ô╟é▌é╡é╜.CUT âtâ@âCâïé╠âAâhâîâX
  30.     movea.l    8+7*4+7*4(sp),a5    * a5.l = Åæé½ì₧é▐âAâhâîâX
  31.  
  32.     move.l    12+7*4+7*4(sp),d0
  33.     bne    not_line_bytes_0
  34.             * éPâëâCâôé╠âoâCâgÉöé¬éOé╛é┴é╜ÅΩìç
  35.     move.w    48(a0),d0    * d0.w = x_size
  36.     subq.w    #1,d0
  37.     lsr.w    #3,d0
  38.     addq.w    #1,d0
  39. not_line_bytes_0:
  40.     move.w    d0,a6        * a6.w = éPâëâCâôé╠âoâCâgÉö
  41.  
  42.     move.w    48(a0),d0    * d0.w = x_size
  43.     subq.w    #1,d0
  44.     lsr.w    #6,d0
  45.     addq.w    #1,d0
  46.     movea.w    d0,a1        * a1.w = âtâëâOé╠âoâCâgÉö
  47.  
  48.     move.w    48(a0),d6    * d6.w = x_size
  49.     subq.w    #1,d6
  50.     lsr.w    #3,d6        * d6.w = x_loop-1
  51.  
  52.     move.w    a6,d4
  53.     subq.w    #1,d4
  54.     sub.w    d6,d4        * d4.w = a5.l é╔ë┴ÄZé╖éΘÉö
  55.  
  56.     move.w    50(a0),d7
  57.     subq.w    #1,d7        * d7.w = y_size-1
  58.  
  59.     lea.l    52(a0),a2    * a2.l = âfü[â^û{æ╠
  60.  
  61.     move.w    a6,d0
  62.     neg.w    d0
  63.     movea.w    d0,a6        * a6.w = -(éPâëâCâôé╠âoâCâgÉö)
  64.  
  65.  
  66. ****    ****
  67.             * éPö╘Åπé╠âëâCâôé≡ôWèJ
  68.     moveq.l    #0,d0
  69.     move.b    (a2)+,d0
  70.     lea.l    -1(a2,d0.w),a4    * a4.l = Äƒé╠ a2.l
  71.  
  72.     cmpi.b    #1,d0
  73.     bne    disp_1st_not_fill
  74.             * éPâëâCâôé╠æìâoâCâgÉöé¬éPé╛é┴é╜ÅΩìç
  75.     move.w    d6,d5
  76. disp_1st_fill:
  77.     clr.b    (a5)+
  78.     dbra    d5,disp_1st_fill
  79.     movea.l    a2,a3
  80.     bra    disp_1st_next
  81.  
  82. disp_1st_not_fill:
  83.     lea.l    (a2,a1.w),a3    * a3.l = ö±ê│Åké╠òöò¬é╠ârâbâgâCâüü[âWâfü[â^ù±
  84.  
  85.     move.w    d6,d5        * d5.w = x_loop
  86.     moveq.l    #1,d3        * d3.w = âtâëâOìXÉVâJâEâôâ^
  87. disp_1st_x_loop:
  88.     ror.b    d3
  89.     bcc    disp_1st_not_next_flag
  90.     move.b    (a2)+,d2    * d2.b = âtâëâO
  91. disp_1st_not_next_flag:
  92.     add.b    d2,d2
  93.     bcc    disp_1st_flag_0
  94.             * âtâëâOé¬éPé╠Ä₧
  95.     move.b    (a3)+,(a5)+
  96.     dbra    d5,disp_1st_x_loop
  97.     bra    disp_1st_next
  98. disp_1st_flag_0:        * âtâëâOé¬éOé╠Ä₧
  99.     clr.b    (a5)+
  100.     dbra    d5,disp_1st_x_loop
  101.  
  102. disp_1st_next:
  103.     movea.l    a4,a2
  104.     lea.l    (a5,d4.w),a5
  105.     subq.w    #1,d7
  106.     bcs    disp_exit
  107.  
  108.  
  109.  
  110. ****    ****
  111. disp_y_loop:
  112.     moveq.l    #0,d0
  113.     move.b    (a2)+,d0
  114.     lea.l    -1(a2,d0.w),a4    * a4.l = Äƒé╠ a2.l
  115.  
  116.     cmpi.b    #1,d0
  117.     bne    disp_not_fill
  118.  
  119.             * éPâëâCâôé╠æìâoâCâgÉöé¬éPé╛é┴é╜ÅΩìç
  120.     move.w    d6,d5
  121. disp_fill:
  122.     move.b    (a5,a6.w),(a5)+
  123.     dbra    d5,disp_fill
  124.     movea.l    a2,a3
  125.     bra    disp_y_next
  126.  
  127.  
  128. disp_not_fill:
  129.     lea.l    (a2,a1.w),a3    * a3.l = ö±ê│Åké╠òöò¬é╠ârâbâgâCâüü[âWâfü[â^ù±
  130.  
  131.     move.w    d6,d5
  132.     moveq.l    #1,d3        * d3.w = âtâëâOìXÉVâJâEâôâ^
  133. disp_x_loop:
  134.     ror.b    d3
  135.     bcc    disp_not_next_flag
  136.     move.b    (a2)+,d2    * d2.b = âtâëâO
  137. disp_not_next_flag:
  138.     add.b    d2,d2
  139.     bcc    disp_flag_0
  140.             * âtâëâOé¬éPé╠Ä₧
  141.     move.b    (a5,a6.w),d0
  142.     move.b    (a3)+,d1
  143.     eor.b    d1,d0
  144.     move.b    d0,(a5)+
  145.     dbra    d5,disp_x_loop
  146.     bra    disp_y_next
  147.  
  148. disp_flag_0:        * âtâëâOé¬éOé╠Ä₧
  149.     move.b    (a5,a6.w),(a5)+
  150.     dbra    d5,disp_x_loop
  151. disp_y_next:
  152.     movea.l    a4,a2
  153.     lea.l    (a5,d4.w),a5
  154.     dbra    d7,disp_y_loop
  155. disp_exit:
  156.  
  157.     moveq.l    #0,d0
  158.     movem.l    (sp)+,d1-d7/a0-a6
  159.     rts
  160.  
  161.